#include <iostream>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <queue>
using namespace std;


//struct node{
//	int t,index,num;
//};
//
//
//bool cmp(node a,node b){
//	return a.num<b.num;
//}


int main(){
	int ans=0x7fffffff;
	int n;
	cin>>n;
	int t[n],num[n];
	memset(num,0,sizeof(num));
	for(int i=0;i<n;i++){
		cin>>t[i];
		t[i]--;
		num[t[i]]++;
//		a[i].index = i;
//		a[i].t = t[i];
//		a[t[i]].num++;
	}
	
	queue<int> del;
	for(int i=0;i<n;i++){
		if(num[i] == 0)
			del.push(i);
	}
	
	while(!del.empty()){
		if(--num[t[del.front()]] == 0)
			del.push(t[del.front()]);
		del.pop();
	}
	
	for(int i=0;i<n;i++){
		if(num[i] == 0)
			continue;
		int first=i,index = t[i],sum=1;
		while(index != first){
			num[index] = 0;
			index = t[index];
			sum++;
		}
		ans = min(ans,sum);
	}
	
	cout<<ans;
	return 0;
}
